package com.triones.yjj.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.page.TableDataInfo;
import com.triones.yjj.entity.StaffDO;
import com.triones.yjj.entity.StaffTeamDO;
import com.triones.yjj.entity.bo.*;
import com.triones.yjj.entity.vo.*;
import org.apache.poi.ss.formula.functions.T;

import java.util.List;
import java.util.Map;

/**
 * 员工管理 service 接口
 *
 * @Author: triones
 */
public interface StaffService {

    /**
     * 查看员工列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffListVO> pageList(StaffListParams params, PageQuery pageQuery);

    /**
     * 修改员工信息
     * @param staffDO
     * @return
     */
    Boolean editStaff(StaffDO staffDO);

    /**
     * 删除员工
     * @param staffIds
     * @return
     */
    Boolean deleteStaffByIds(Long[] staffIds);

    /**
     * 获取详细信息
     * @param staffId
     * @return
     */
    StaffVO getDetailById(Long staffId);

    /**
     * 员工战队列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffTeamVO> teamPageList(TeamListParams params, PageQuery pageQuery);

    /**
     * 添加员工战队
     * @param staffTeamDO
     * @return
     */
    Boolean addStaffTeam(StaffTeamDO staffTeamDO);

    /**
     * 检查战队名称是否存在
     * @param staffTeamDO
     * @return
     */
    boolean checkTeamNameUnique(StaffTeamDO staffTeamDO);

    /**
     * 删除员工战队
     * @param teamIds
     * @return
     */
    Boolean deleteStaffTeamByIds(Long[] teamIds);

    /**
     * 查询战队的员工列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffListVO> teamStaffPageList(TeamStaffListParams params, PageQuery pageQuery);

    /**
     * 移除战队员工
     * @param staffId
     * @param teamId
     * @return
     */
    Boolean removeTeamStaff(Long staffId, Long teamId);

    /**
     * 查询不存在该战队的员工
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<NoExistTeamStaffListVO> teamNoExistStaffPageList(TeamStaffListParams params, PageQuery pageQuery);

    /**
     * 批量添加员工至某战队
     * @param staffIds
     * @param teamId
     * @return
     */
    Boolean addStaffToTeam(Long[] staffIds, Long teamId);

    /**
     * 获取是否拥有访问该活动权限的员工列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<IsVisitActivityStaffListVO> getIsVisitStaffPageList(IsVisitStaffListParams params, PageQuery pageQuery);

    /**
     * 批量添加员工访问活动权限
     * @param staffIds
     * @param activityId
     * @return
     */
    Boolean addStaffActivityVisitAuth(Long[] staffIds, Long activityId);

    /**
     * 查询所有已经绑定过该活动的员工列表
     * @param activityId
     * @return
     */
    List<StaffListVO> relateActivityStaffList(Long activityId);

    /**
     * 查询关联活动的战队列表
     * @param activityId
     * @return
     */
    List<StaffTeamVO> teamListByActivity(Long activityId);

    /**
     * 获取员工数据明细列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffDetailListVO> staffDetailPageList(StaffTeamDataParams params, PageQuery pageQuery);

    /**
     * 获取员工排行榜列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffRankListVO> staffRankPageList(StaffTeamDataParams params, PageQuery pageQuery);

    /**
     * 获取战队统计列表（分页）
     * @param params
     * @param pageQuery
     * @return
     */
    TableDataInfo<StaffRankListVO> teamStatsPageList(StaffTeamDataParams params, PageQuery pageQuery);

    StaffVO getDetailByWxId(Long wxUserId,Long userId);

    R<T> register(WxStaffRegisterParams params);

    /**
     * 修改姓名手机号
     * @param params
     * @param id
     */
    void updateBaseInfo(WxStaffUpdateParams params,Long id);

    /**
     * 修改二维码
     * @param qr
     * @param id
     */
    void updateQrCode(String qr,Long id);

    List<WxStaffSysUseVO> getStaffSysUserList(String openId);

    /**
     * 获取客户分享id和分享记录id
     * @param wxStaffDetailVO
     * @param activityId
     * @param memberId
     * @return
     */
    Map<String, Object> getShareIdAndShareRecordId(WxStaffDetailVO wxStaffDetailVO, Long activityId, Long memberId);

    /**
     * 根据id获取员工信息
     * @param id
     * @return
     */
    StaffVO getStaffInfo(String id);

    /**
     * 自我删除员工资格
     * @param uid
     * @param wxUserId
     */
    void removeStaff(Long uid, Long wxUserId);
}
